依旧是斜率优化的套路。
设 $f_i$ 表示前 $i$ 个士兵的最大贡献,转移显然是枚举一个 $j$ ,将 $j+1$ 到 $i$ 这些士兵组成特别行动队算贡献:
其中 $s_i$ 为战斗力的前缀和。这个方程是 $O(n^2)$ 的,需要优化。发现这个转移式貌似不满足单调队列优化的条件,于是将中间的式子拆开看看可不可以斜率优化。
诶,是 $y=kx+b$ 的形式,而且满足斜率优化的条件诶。继续将 $x,y$ 找出来放到坐标系上( $x=s_j$,$y=f_j+a\cdot s_j^2-b\cdot s_j$) 。
因为是 $\max$ ,所以用单调队列维护一下上凸壳然后转移即可,复杂度 $O(n)$ 。
Code:
1 |
|
本文标题:【题解】 [APIO2010]特别行动队 斜率优化DP luoguP3628
文章作者:Qiuly
发布时间:2019年04月24日 - 00:00
最后更新:2019年04月28日 - 13:52
原始链接:http://qiulyblog.github.io/2019/04/24/[题解]luoguP3628/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。